//package com.yunjijia.config;
//
//import javax.sql.DataSource;
//
//import org.apache.ibatis.plugin.Interceptor;
//import org.apache.ibatis.session.SqlSessionFactory;
//import org.apache.ibatis.type.JdbcType;
//import org.mybatis.spring.SqlSessionTemplate;
//import org.mybatis.spring.annotation.MapperScan;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Primary;
//import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
//import org.springframework.jdbc.datasource.DataSourceTransactionManager;
//
//import com.baomidou.mybatisplus.annotation.DbType;
//import com.baomidou.mybatisplus.annotation.FieldStrategy;
//import com.baomidou.mybatisplus.annotation.IdType;
//import com.baomidou.mybatisplus.core.MybatisConfiguration;
//import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver;
//import com.baomidou.mybatisplus.core.config.GlobalConfig;
//import com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig;
//import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
//import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
//
///**
// * @author <a href="zhaojiatao"></a>
// * @version 1.0, 2017/11/24
// * @description
// */
//@Configuration
//// 精确到 mapper 目录，以便跟其他数据源隔离
//@MapperScan(basePackages = "com.yunjijia.mapper",  sqlSessionFactoryRef = "mastersqlSessionFactory")
//public class MybatisDatasourceConfig {
//
//    @Autowired
//    @Qualifier("dataSource")
//    private DataSource ds;
//
//
//
//    @Primary
//    @Bean("mastersqlSessionFactory")
//    public SqlSessionFactory mastersqlSessionFactory() throws Exception {
//        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
//        sqlSessionFactory.setDataSource(ds);
//        MybatisConfiguration configuration = new MybatisConfiguration();
//        configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
//        configuration.setJdbcTypeForNull(JdbcType.NULL);//如果没有值插入空
//        configuration.setCallSettersOnNulls(true);//如果返回的字段为空则保留该字段
//        configuration.setMapUnderscoreToCamelCase(true);//配置返回数据库(column下划线命名&&返回java实体是驼峰命名)，自动匹配无需as（没开启这个，SQL需要写as： select user_id as userId）
//        sqlSessionFactory.setConfiguration(configuration);
//
//        sqlSessionFactory.setTypeAliasesPackage("com.yunjijia.pojo");
//        GlobalConfig globalConfig = new GlobalConfig();
//        DbConfig dbConfig = new DbConfig();
//        dbConfig.setDbType(DbType.MYSQL);
//        dbConfig.setIdType(IdType.ID_WORKER_STR);
//        dbConfig.setFieldStrategy(FieldStrategy.NOT_EMPTY);
//        dbConfig.setTableUnderline(true);
//        globalConfig.setDbConfig(dbConfig);
//        globalConfig.setWorkerId(1l);
//        globalConfig.setDatacenterId(1l);
//        sqlSessionFactory.setGlobalConfig(globalConfig);
//
//        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
//        sqlSessionFactory.setPlugins(new Interceptor[]{
////                new PaginationInterceptor(),//<!-- 分页插件配置 -->
//                new PerformanceInterceptor()// <!-- 性能拦截器，兼打印sql，不建议生产环境配置-->
////                new OptimisticLockerInterceptor()//<!-- 乐观锁插件 -->
//        });
//        return sqlSessionFactory.getObject();
//    }
//
//    @Bean
//    public SqlSessionTemplate sqlSessionTemplate() throws Exception {
//        SqlSessionTemplate template = new SqlSessionTemplate(mastersqlSessionFactory()); // 使用上面配置的Factory
//        return template;
//    }
//
//    //关于事务管理器，不管是JPA还是JDBC等都实现自接口 PlatformTransactionManager
//    // 如果你添加的是 spring-boot-starter-jdbc 依赖，框架会默认注入 DataSourceTransactionManager 实例。
//    //在Spring容器中，我们手工注解@Bean 将被优先加载，框架不会重新实例化其他的 PlatformTransactionManager 实现类。
//    @Bean(name = "transactionManager")
//    @Primary
//    public DataSourceTransactionManager masterTransactionManager() {
//        //MyBatis自动参与到spring事务管理中，无需额外配置，只要org.mybatis.spring.SqlSessionFactoryBean引用的数据源
//        // 与DataSourceTransactionManager引用的数据源一致即可，否则事务管理会不起作用。
//        return new DataSourceTransactionManager(ds);
//    }
//
//}